package I.堆;

import org.omg.PortableInterceptor.INACTIVE;

import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.Queue;

public class _1046_最后一块石头的重量 {
    /**
     * 自解：用大顶堆实现 循环 从其中弹出前两个 if最大的-另一个>0 就结果offer进去 如果相等就break
     * 循环结束的条件堆长度=1 返回堆顶元素 =0 返回0
     * @param stones
     * @return
     */
    public int lastStoneWeight(int[] stones) {

        if (stones.length == 1 ){
            return stones[0];
        }

        PriorityQueue<Integer> queue = getQueue(stones);

        while (queue.size()>1){
            helper(queue);
        }

        if (queue.size()==1){
            return queue.peek();
        }else {
            return 0;
        }

    }

    public PriorityQueue<Integer> getQueue(int[] stones){
        //改为大顶堆
        Queue<Integer> queue = new PriorityQueue<>((num1,num2)->num2-num1);

        for (int stone:stones){
            queue.offer(stone);
        }
        return (PriorityQueue<Integer>) queue;

    }

    public void helper(PriorityQueue<Integer> queue){

        int biggest = queue.poll();
        int bigger = queue.poll();

        if (bigger < biggest){
            queue.offer(biggest-bigger);
        }else {
            return;
        }
    }

}
